package net.hn.hnms.biz.equipment.controller;


import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import net.hn.hnms.biz.equipment.domain.dto.HisDto;
import net.hn.hnms.biz.equipment.domain.dto.NowDto;
import net.hn.hnms.biz.equipment.domain.dto.PointDto;
import net.hn.hnms.biz.equipment.domain.vo.*;
import net.hn.hnms.biz.equipment.service.DrivageService;
import net.hn.hnms.sys.common.core.domain.R;
import net.hn.hnms.sys.common.core.domain.ResponsePage;
import net.hn.hnms.sys.common.mybatis.core.page.PageQuery;
import net.hn.hnms.sys.common.satoken.config.AutoSetMineCode;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * 快速掘进Controller
 *
 */
@Api(value = "快速掘进系统控制器", tags = {"快速掘进系统"})
@RestController
@RequestMapping("/drivage")
public class DrivageController {

    @Resource
    private DrivageService drivageService;


    /**
     * 获取所属设备下拉列表
     * @return
     */
    @ApiOperation("获取所属设备下拉列表")
    @GetMapping("categoryList")
    @AutoSetMineCode
    public R categoryList(@ApiParam(value = "煤矿编码") String mineCode) {
        List<String> list = drivageService.categoryList(mineCode);
        return R.ok(list);
    }

    /**
     * 获取设备位置下拉列表
     * @return
     */
    @ApiOperation("获取设备位置下拉列表")
    @GetMapping("deviceLocaltionList")
    @AutoSetMineCode
    public R deviceLocaltionList(@ApiParam(value = "煤矿编码") String mineCode) {
        List<String> list = drivageService.deviceLocaltionList(mineCode);
        return R.ok(list);
    }

    /**
     * * 分页条件查询实时数据
     * @param pageQuery
     * @param nowDTO
     * @return
     */
    @ApiOperation("分页条件查询实时数据")
    @GetMapping("pageNowList/pageList")
    @AutoSetMineCode
    public R<ResponsePage<NowVo>> pageNowList(PageQuery pageQuery, NowDto nowDTO) {
        ResponsePage<NowVo> list = drivageService.pageNowList(pageQuery, nowDTO);
        return R.ok(list);
    }
    /**
     * * 分页条件查询历史数据
     *
     * @param pageQuery
     * @param hisDTO
     * @return
     */
    @ApiOperation("分页条件查询历史数据")
    @GetMapping("pageHistoryInfo/pageList")
    @AutoSetMineCode
    public R<ResponsePage<HisVo>> pageHistoryInfo(PageQuery pageQuery, HisDto hisDTO) {
        ResponsePage<HisVo> page = drivageService.pageHistoryInfo(pageQuery, hisDTO);
        return R.ok(page);
    }

    /**
     * 快速掘进生产监控的报警动态接口。查询NOW表，查询条件为BJ
     *
     * @return
     */
    @ApiOperation("报警动态")
    @GetMapping("alarmNow/info")
    @AutoSetMineCode
    public R<List<DrivageNowAlarmVo>> alarmNowInfo(@ApiParam(name = "valueType",value="数值类型：默认为 BJ（报警）",required = false)String valueType,
                                                   @ApiParam(name = "value",value="是否报警，默认为1",required = false)Integer value,
                                                   @ApiParam(value = "煤矿编码") String mineCode) {
        List<DrivageNowAlarmVo> drivageNowAlarmVoList = drivageService.alarmNowInfo(valueType,value,mineCode);
        return R.ok(drivageNowAlarmVoList);
    }
    @ApiOperation("条件查询历史数据测点曲线")
    @GetMapping("pointHistoryCurve")
    @AutoSetMineCode
    public R<ChartDateVo> pointHistoryCurve(PointDto pointDto) {
        //开始时间  若为空默认为前6小时的日期 >=data_time
        if (pointDto.getStartTime() == null) {
            Calendar instance = Calendar.getInstance();
            instance.setTime(new Date());
            //日期减6小时
            instance.add(Calendar.HOUR_OF_DAY, -6);
            pointDto.setStartTime(instance.getTime());
        }
        if  (pointDto.getEndTime() == null) {
            pointDto.setEndTime(new Date());
        }
        if (pointDto.getEndTime().getTime() - pointDto.getStartTime().getTime() > (3600 * 24 * 31 * 1000L)) {
            //1月得数据
            return R.fail("请选择1月内时间范围");
        }
        ChartDateVo chartDateVo= drivageService.pointHistoryCurve(pointDto);
        return R.ok(chartDateVo);
    }
    @ApiOperation("条件查询历史数据测点列表")
    @GetMapping("pointHistoryList")
    @AutoSetMineCode
    public R<List<PointHistoryListVo>> pointHistoryList(PointDto pointDto) {
        //开始时间  若为空默认为前6小时的日期 >=data_time
        if (pointDto.getStartTime() == null) {
            Calendar instance = Calendar.getInstance();
            instance.setTime(new Date());
            //日期减6小时
            instance.add(Calendar.HOUR_OF_DAY, -6);
            pointDto.setStartTime(instance.getTime());
        }
        if  (pointDto.getEndTime() == null) {
            pointDto.setEndTime(new Date());
        }
        if (pointDto.getEndTime().getTime() - pointDto.getStartTime().getTime() > (3600 * 24 * 31 * 1000L)) {
            //1月得数据
            return R.fail("请选择1月内时间范围");
        }
        List<PointHistoryListVo> list= drivageService.pointHistoryList(pointDto);
        return R.ok(list);
    }
}
